package dao.Implementation;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import Donnees.Formule;
import Donnees.Periode;
import Donnees.Prix;
import Donnees.Sejour;
import Util.HibernateUtil;
import dao.Interfaces.ISejourDAO;

public class SejourDAO implements ISejourDAO {
	public SejourDAO(){
	}
	
	public List<Sejour> selectAll() {
		List<Sejour> listeSejour = new ArrayList<Sejour>();
		
		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction tx = session.beginTransaction();
		
		listeSejour.addAll(session.createQuery("from Sejour").list());
		
		session.flush();
		tx.commit();
		session.close();
		
		return listeSejour;
	}


	public long insert(Sejour s) {
		Sejour sejourTemp = s;
		Long msgId;
		PeriodeDAO periodeDao = new PeriodeDAO();
		Periode periode = periodeDao.getById(sejourTemp.getIdPeriode());

		sejourTemp.setPeriode(periode);
		
		FormuleDAO formuleDao = new FormuleDAO();
		Formule formule = formuleDao.getById(sejourTemp.getIdFormule());
		
		sejourTemp.setFormule(formule);
		
		PrixDAO prixDao = new PrixDAO();
		Prix prix = prixDao.getById(sejourTemp.getPrixId());

		sejourTemp.setPrix(prix);
		

		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction tx = session.beginTransaction();

		msgId = (Long) session.save(sejourTemp);

		session.flush();
		tx.commit();
		session.close();

		return msgId;
	}

	public int delete(Sejour s) {
		Sejour sejourTemp = s;
		int retour;

		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction tx = session.beginTransaction();

		retour = session.createQuery(
				"delete from Sejour where id='" + sejourTemp.getId() + "'")
				.executeUpdate();

		session.flush();
		tx.commit();
		session.close();

		return retour;
	}
	
	public Sejour getById(long id) {
		Sejour sejour = new Sejour();

		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction tx = session.beginTransaction();

		sejour = (Sejour) session.createQuery("from Sejour where id='" + id +"'").list().get(0);

		session.flush();
		tx.commit();
		session.close();

		return sejour;
	}
}
